/***********************************************


	>	Author: SuperDian
	>	Mail: tech-sky@outlook.com
	>	Create Time: 2016年03月15日 星期二 15时19分17秒
	>	File Name: 617E.cc

***********************************************/

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <cctype>


using namespace std;
const int maxn = 1e6+1000;
struct node
{
	int a,b;
	int id;
}Node[maxn];

int unit,n,m,k;
long long ans[maxn];
int num[2*maxn];
int A[maxn];

bool cmp(node x,node y)
{
	if((x.a/unit)==(y.a/unit))	return x.b<y.b;
	else return x.a<y.a;
}

void work()
{
	int i,j;
	memset(num, 0, sizeof(num));
	int L=1;
	int R=0;
	long long tmp = 0;
	for(int i=0;i<m;i++)
	{
		while(R<Node[i].b)
		{
			R++;
			tmp += num[A[R]^k];
			num[A[R]]++;
		}
		while(R>Node[i].b)
		{
			num[A[R]]--;
			tmp-=num[A[R]^k];
			R--;
		}
		while(L>Node[i].a-1)
		{
			L--;
			tmp+=num[A[L]^k];
			num[A[L]]++;
		}
		while(L<Node[i].a-1)
		{
			num[A[L]]--;
			tmp-=num[A[L]^k];
			L++;
		}
		ans[Node[i].id]=tmp;
	}
}
int main()
{
	scanf("%d%d%d",&n,&m,&k);
	int i,j;
	A[0]=0;
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&A[i]);
		A[i]^=A[i-1];
	}
	for(int i=0;i<m;i++)
	{
		scanf("%d%d",&Node[i].a,&Node[i].b);
		Node[i].id = i;
	}
	unit =(int)ceil(sqrt((double)n));
	sort(Node,Node+m,cmp);
	work();
	for(int i=0;i<m;i++)
	{	
		printf("%I64d\n",ans[i]);
	}
}
